#ifndef STYLEDTABLEVIEW_H
#define STYLEDTABLEVIEW_H

#include <QWidget>
#include <QTableView>
#include <QStandardItemModel>
#include <QVBoxLayout>
#include <QList>
#include <QMap>
#include <QString>
#include <QVariant>
#include <QPushButton>
#include "pogo/vo/materialvo.h"

// 操作按钮信息结构体
struct ActionButtonInfo {
    QString text;       // 按钮显示文本
    QString identifier; // 按钮唯一标识

    ActionButtonInfo(const QString& txt, const QString& id)
        : text(txt), identifier(id) {}
};

/**
 * 带样式的表格视图组件，支持物料数据展示和操作
 */
class StyledTableView : public QWidget
{
    Q_OBJECT

public:
    explicit StyledTableView(QWidget *parent = nullptr);
    ~StyledTableView() = default;

    // 设置表头信息
    void setHeaders(const QList<QString>& fieldOrder, const QMap<QString, QString>& headerMap);

    // 设置表格数据列表
    void setDataList(const QList<MaterialVO*>& dataList);

    // 从数据列表更新表格内容
    void updateTableFromEntities();

    // 刷新表格交互控件
    void refreshTableView();

signals:
    // 操作按钮点击信号
    void actionButtonClicked(const QString& operation, int materialId, int quantity, int row);

private slots:
    // 操作按钮点击事件处理
    void onActionButtonClicked();

private:
    // 初始化UI组件
    void setupUI();

    // 应用表格样式
    void applyTableStyling();

    // 获取指定行的数量输入值
    int getQuantity(int row) const;

    // 获取指定行的物料ID
    int getMaterialId(int row) const;

private:
    QTableView* tableView;                // 表格视图控件
    QStandardItemModel* model;            // 表格数据模型
    QVBoxLayout* mainLayout;              // 主布局管理器
    QList<MaterialVO*> m_dataList;         // 物料数据列表
    QList<ActionButtonInfo> actionButtons;// 操作按钮配置

    QList<QString> m_fieldOrder;          // 字段显示顺序
    QMap<QString, QString> m_headerMap;   // 字段-标题映射
    int quantityColumnIndex;              // 数量列索引
    int actionColumnIndex;                // 操作列索引
};

#endif // STYLEDTABLEVIEW_H
